// 手写Promise.all()


function promiseAllFn(promiseArray) {
	return new Promise((resolve,reject) => {
		// 判断传入的参数是数组
		if (!Array.isArray(promiseArray)) {
			return reject(new error('传入的参数必须是数组'))
		}
		// 通过 Promise.resolve 将每个数组元素传为 promise
		// 通过计数器来判断 promsie 已经完成
		let count = 0;
		let res = [] // res 存储promsie结果
		let len = promiseArray.length
		for (let i =0; i < len; i++) {
			// 这里循环执行传入数组的每一个数组项，通过 promise.resolve() 将数组的每一项都转为 promsie
			Promise.resolve(promiseArray[i]).then(val => {
				count++
				res[i] = val
				if (count === len) { // 这里判断所有promise都已经执行完毕
					resolve(res)
				}
			}).catch(e => reject(e))
		}
	})
}


function myPromsieAll(promiseArray){
	return new Promise((resolve, reject) => {
		// 判断传入的参数是不是数组
		if(!Array.isArray(promiseArray)){
			return reject(new error('传入的参数必须是数组！'))
		}
		/*
			1. 通过promise.resolve().then()将数组中的类型都转为promise
			2. 通过计时器，将数组的promiseArray按顺序返回
		*/
		const res = []; // 存放请求结果
		let count = 0; // 计数器计算promise是否请求完毕
		const len = promiseArray.length;
		for(let i = 0; i < len; i++) {
			Promise.resolve(promiseArray[i]).then(val => {
				count++
				res[i] = val
				if(count === len) { // 如果长度相等，说明promise都执行完毕，返回结果
					resolve(res)
				}
			}).catch(e => reject(e))
		}
	})
}
// 测试
const pro1 = new Promise((res,rej) => {
	setTimeout(()=>{
		rej('拒绝原因111')
	}, 1000)
})

const pro2 = new Promise(res => {
	setTimeout(() => {
		res('2')
	}, 2000)
})
const pro3 = new Promise(res => {
	setTimeout(() => {
		res('3')
	}, 3000)
})
const proAll = myPromsieAll([pro1.catch(err => err), pro2, pro3]).then(([res1,res2,res3]) => {
	console.log('第一个promise:pro1',res1)
	console.log('第二个promise:pro1',res2)
	console.log('第三个promise:pro1',res3)
},(val) => {
	console.log('promise失败，传入的值为',val)
}).catch((e) => {console.log(e)})